package py.com.erpone.entity.almacen;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.validation.constraints.NotNull;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import py.com.erpone.entity.dm.Producto;
import py.com.erpone.entity.dm.SectorDivision;
import py.com.erpone.entity.dm.Ubicacion;

@Entity
@NamedQueries(value={@NamedQuery(name="loteDetalle.all",query="select p from Lote p order by p.id")})
public class LoteDetalle implements Serializable{
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;
	@NotNull
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="lote_id")
	private Lote lote;
	@NotNull
	private String loteNumero;
	private Date vencimiento;
	private Double cantidadSolicitada;
	private Double cantidadRecibida;
	private Double cantidadDevuelta;
	private Double cantidadVerificada;
	private String situacion;
	@Column(columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
	private Date fecha;
	/***
	 * OBS:seran utilizados para marcar el producto como patrimonio
	 * y asignarle un encargado
	 */
	@Column(columnDefinition="tinyint(1) default 1")
	private Boolean patrimonio;
	/***
	 * OBS: Servir� para la ubicaci�n.
	 */
	@OneToOne
	@LazyCollection(LazyCollectionOption.FALSE)
	  @JoinColumn(name="sectorDivision_id")
	private SectorDivision sectorDivision;
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "producto_id", nullable = false)
	private Producto producto;

	public LoteDetalle() {
		super();
	}

	public long getId() {
		return id;
	}

	public SectorDivision getSectorDivision() {
		return sectorDivision;
	}

	public void setSectorDivision(SectorDivision sectorDivision) {
		this.sectorDivision = sectorDivision;
	}

	public void setId(long id) {
		this.id = id;
	}

	public Lote getLote() {
		return lote;
	}

	public void setLote(Lote lote) {
		this.lote = lote;
	}

	public String getLoteNumero() {
		return loteNumero;
	}

	public void setLoteNumero(String loteNumero) {
		this.loteNumero = loteNumero;
	}

	public Date getVencimiento() {
		return vencimiento;
	}

	public void setVencimiento(Date vencimiento) {
		this.vencimiento = vencimiento;
	}

	public Double getCantidadSolicitada() {
		return cantidadSolicitada;
	}

	public void setCantidadSolicitada(Double cantidadSolicitada) {
		this.cantidadSolicitada = cantidadSolicitada;
	}

	public Double getCantidadRecibida() {
		return cantidadRecibida;
	}

	public void setCantidadRecibida(Double cantidadRecibida) {
		this.cantidadRecibida = cantidadRecibida;
	}

	public Double getCantidadDevuelta() {
		return cantidadDevuelta;
	}

	public void setCantidadDevuelta(Double cantidadDevuelta) {
		this.cantidadDevuelta = cantidadDevuelta;
	}

	public Double getCantidadVerificada() {
		return cantidadVerificada;
	}

	public void setCantidadVerificada(Double cantidadVerificada) {
		this.cantidadVerificada = cantidadVerificada;
	}

	public String getSituacion() {
		return situacion;
	}

	public void setSituacion(String situacion) {
		this.situacion = situacion;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}


	public Boolean getPatrimonio() {
		return patrimonio;
	}


	public void setPatrimonio(Boolean patrimonio) {
		this.patrimonio = patrimonio;
	}
 

	public Producto getProducto() {
		return producto;
	}


	public void setProducto(Producto producto) {
		this.producto = producto;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime
				* result
				+ ((cantidadDevuelta == null) ? 0 : cantidadDevuelta.hashCode());
		result = prime
				* result
				+ ((cantidadRecibida == null) ? 0 : cantidadRecibida.hashCode());
		result = prime
				* result
				+ ((cantidadSolicitada == null) ? 0 : cantidadSolicitada
						.hashCode());
		result = prime
				* result
				+ ((cantidadVerificada == null) ? 0 : cantidadVerificada
						.hashCode());
		result = prime * result + ((fecha == null) ? 0 : fecha.hashCode());
		result = prime * result + (int) (id ^ (id >>> 32));
		result = prime * result + ((lote == null) ? 0 : lote.hashCode());
		result = prime * result
				+ ((loteNumero == null) ? 0 : loteNumero.hashCode());
		result = prime * result
				+ ((patrimonio == null) ? 0 : patrimonio.hashCode());
		result = prime * result
				+ ((producto == null) ? 0 : producto.hashCode());
		result = prime * result
				+ ((sectorDivision == null) ? 0 : sectorDivision.hashCode());
		result = prime * result
				+ ((situacion == null) ? 0 : situacion.hashCode());
		result = prime * result
				+ ((vencimiento == null) ? 0 : vencimiento.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		LoteDetalle other = (LoteDetalle) obj;
		if (cantidadDevuelta == null) {
			if (other.cantidadDevuelta != null)
				return false;
		} else if (!cantidadDevuelta.equals(other.cantidadDevuelta))
			return false;
		if (cantidadRecibida == null) {
			if (other.cantidadRecibida != null)
				return false;
		} else if (!cantidadRecibida.equals(other.cantidadRecibida))
			return false;
		if (cantidadSolicitada == null) {
			if (other.cantidadSolicitada != null)
				return false;
		} else if (!cantidadSolicitada.equals(other.cantidadSolicitada))
			return false;
		if (cantidadVerificada == null) {
			if (other.cantidadVerificada != null)
				return false;
		} else if (!cantidadVerificada.equals(other.cantidadVerificada))
			return false;
		if (fecha == null) {
			if (other.fecha != null)
				return false;
		} else if (!fecha.equals(other.fecha))
			return false;
		if (id != other.id)
			return false;
		if (lote == null) {
			if (other.lote != null)
				return false;
		} else if (!lote.equals(other.lote))
			return false;
		if (loteNumero == null) {
			if (other.loteNumero != null)
				return false;
		} else if (!loteNumero.equals(other.loteNumero))
			return false;
		if (patrimonio == null) {
			if (other.patrimonio != null)
				return false;
		} else if (!patrimonio.equals(other.patrimonio))
			return false;
		if (producto == null) {
			if (other.producto != null)
				return false;
		} else if (!producto.equals(other.producto))
			return false;
		if (sectorDivision == null) {
			if (other.sectorDivision != null)
				return false;
		} else if (!sectorDivision.equals(other.sectorDivision))
			return false;
		if (situacion == null) {
			if (other.situacion != null)
				return false;
		} else if (!situacion.equals(other.situacion))
			return false;
		if (vencimiento == null) {
			if (other.vencimiento != null)
				return false;
		} else if (!vencimiento.equals(other.vencimiento))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "LoteDetalle [id=" + id + ", lote=" + lote + ", loteNumero="
				+ loteNumero + ", vencimiento=" + vencimiento
				+ ", cantidadSolicitada=" + cantidadSolicitada
				+ ", cantidadRecibida=" + cantidadRecibida
				+ ", cantidadDevuelta=" + cantidadDevuelta
				+ ", cantidadVerificada=" + cantidadVerificada + ", situacion="
				+ situacion + ", fecha=" + fecha + ", patrimonio=" + patrimonio
				+ ", sectorDivision=" + sectorDivision + ", producto="
				+ producto + "]";
	}

	
	



}
